﻿// Формирование изображения штрихкода для указанного объекта
// 
// Параметры: 
//  Нет 
// 
// Возвращаемое значение: 
//  Картинка - Картинка со сформированным штрихкодом ИЛИ НЕОПРЕДЕЛЕНО
Функция ПолучитьКартинкуШтрихкода()

	// В зависимости от типа платформы подключим соответствующую внешнюю компоненту
	ИнформацияОСистеме = Новый СистемнаяИнформация;
	Если ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда

		ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовWindows32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);

	ИначеЕсли ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда

		ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовWindows64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);

	ИначеЕсли ИнформацияОСистеме.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда

		ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовLinux32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);		

	Иначе

		ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодовLinux64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);

	КонецЕсли;

	// Создадим объект внешней компоненты
	Компонент = Новый("AddIn.КартинкаШтрихкода.Barcode");

	// Если нет возможности рисовать
	Если НЕ Компонент.ГрафикаУстановлена Тогда

		// То картинку сформировать не сможем
		Возврат Неопределено;

	КонецЕсли;

	// Если в системе установлен шрифт Tahoma
	Если Компонент.НайтиШрифт("Tahoma") = Истина Тогда

		// Выбираем его как шрифт для формирования картинки
		Компонент.Шрифт = "Tahoma";

	Иначе

		// Шрифт Tahoma в системе отсутствует

		// Обойдем все доступные компоненте шрифты
		Для Сч = 0 По Компонент.КоличествоШрифтов -1 Цикл

			// Получим очередной шрифт, доступный компоненте
			ТекущийШрифт = Компонент.ШрифтПоИндексу(Сч);

			// Если шрифт доступен
			Если ТекущийШрифт <> Неопределено Тогда

				// Они и будет шрифтом для формирования штрихкода
				Компонент.Шрифт = ТекущийШрифт;
				Прервать;

			КонецЕсли;

		КонецЦикла;

	КонецЕсли;

	// Установим размер шрифта
	Компонент.РазмерШрифта = 12;

	// Зададим размер картинки
	Компонент.Ширина = 100;
	Компонент.Высота = 90;

	// Разрешим компоненте самой определять тип кода
	Компонент.АвтоТип = Истина;
	// ИЛИ установим код EAN-13
	// Компонент.ТипКода = 1;
	//
	// Тип смотрим в документации на внешнюю компоненту

	// Если код содержит контрольный символ, обязательно указываем
	Компонент.СодержитКС = СтрДлина(ЭтотОбъект.Штрихкод) = 13;

	// Если отображать контрольный символ не нужно
	// Компонент.ВидимостьКС = Ложь;

	// Формируем картинку штрихкода
	Компонент.ЗначениеКода = ЭтотОбъект.Штрихкод;

	// Если установленная нами ширина меньше минимально допустимой для этого штрихкода
	Если Компонент.Ширина < Компонент.МинимальнаяШиринаКода Тогда

		// Скорректируем ширину
		Компонент.Ширина = Компонент.МинимальнаяШиринаКода + 10;

	КонецЕсли;

	// Сформируем картинку
	ДвоичныеДанныеКартинки = Компонент.ПолучитьШтрихкод();

	// Если картинка сформировалась
	Если НЕ ДвоичныеДанныеКартинки = Неопределено Тогда

		// Формируем из двоичных данных
		Возврат Новый Картинка(ДвоичныеДанныеКартинки);

	КонецЕсли;

	Возврат Неопределено;

КонецФункции

// Формирование печатной формы штрихкода
//
// Параметры:
//  ТабличныйДокумент - табличный документ, куда будет выводится штрихкод
//
// Возвращаемое значение:
//  Нет
Процедура ПечатнаяФормаШтрихкода(ТабличныйДокумент) Экспорт

	// Получим макет для штрих-кода
	Макет = Справочники.Товары.ПолучитьМакет("МакетПечатиШтрихкода");

	// Заполним параметры объекта
	Шапка = Макет.ПолучитьОбласть("Шапка");
	Шапка.Параметры.Заполнить(ЭтотОбъект);

	// Сформируем картинку штрихкода
	КартинкаШтрихкода = ПолучитьКартинкуШтрихкода();

	// Если смогли её сформировать
	Если НЕ КартинкаШтрихкода = Неопределено Тогда

		// Выведем её в табличный документ
		Рисунок = Шапка.Область("Картинка");
		Рисунок.Картинка = КартинкаШтрихкода;

	КонецЕсли;

	// Выведем сформированный результат в результирующий табличный документ
	ТабличныйДокумент.Вывести(Шапка);

КонецПроцедуры
